# 建表写在models.py文件里面
from exts import db

"""
以下表关系：
一个用户对应多篇文章（一对多）
一篇文章对应多个标签，一个标签对应多个文章（多对多）
"""
"""
一对一关系中，需要设置relationship中的uselist=Flase，其他数据库操作一样。
一对多关系中，外键设置在多的一方中，关系（relationship）可设置在任意一方。
多对多关系中，需建立关系表，设置 secondary=关系表
 CREATE DATABASE `wordpress` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 
"""

# 用户表
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(50))
    email = db.Column(db.String(50))

# 关系表（多对多）
article_tag_table = db.Table('article_tag',
                             db.Column('article_id', db.Integer, db.ForeignKey('article.id'), primary_key=True),
                             db.Column('tag_id', db.Integer, db.ForeignKey('tag.id'), primary_key=True))

# 文章表
class Article(db.Model):
    __tablename__ = 'article'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(100))
    content = db.Column(db.Text)
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))

    author = db.relationship("User", backref="articles")
    tags = db.relationship("Tag", secondary=article_tag_table, backref='tags')

# 标签表
class Tag(db.Model):
    __tablename__ = 'tag'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(50))

# 设置表
class Fax_config(db.Model):
    __tablename__ = 'fax_config'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(50)) #传真设置表
    account=db.Column(db.String(20)) #傲发账号
    sender1=db.Column(db.String(100))   #公司名
    sender2=db.Column(db.String(30))    #人名

# 传真发送表

class aofax_send_task(db.Model):
    __tablename__ = 'aofax_send_task'
    taskid=db.Column(db.Integer,primary_key=True, autoincrement=True)
    title=db.Column(db.String(200))
    ic=db.Column(db.Integer)
    ldc=db.Column(db.Integer)
    fax=db.Column(db.String(64))
    account=db.Column(db.String(20))
    sender1=db.Column(db.String(100))
    sender2=db.Column(db.String(30))
    receiver1=db.Column(db.String(100))
    receiver2=db.Column(db.String(30))
    sendfile=db.Column(db.String(500))
    sendflag=db.Column(db.Integer)
    line=db.Column(db.Integer)
    status=db.Column(db.Integer)
    extinfo=db.Column(db.String(200))
    retcode=db.Column(db.Integer)
    sendtime=db.Column(db.Integer)
    faxfile=db.Column(db.String(260))
    reserve1=db.Column(db.Integer)
    reserve2=db.Column(db.Integer)
    ext1=db.Column(db.Integer)
    ext2=db.Column(db.Integer)
    memo=db.Column(db.String(200))
    subtype=db.Column(db.Integer)
   
#传真接收表
class aofax_recv_task(db.Model):
    __tablename__ = 'aofax_recv_task'
    taskid=db.Column(db.Integer,primary_key=True, autoincrement=True)
    title=db.Column(db.String(200))
    ic=db.Column(db.Integer)
    ldc=db.Column(db.Integer)
    fax=db.Column(db.String(64))
    sender1=db.Column(db.String(100))
    sender2=db.Column(db.String(30))
    receiver1=db.Column(db.String(100))
    receiver2=db.Column(db.String(30))
    faxfile=db.Column(db.String(260))
    page=db.Column(db.Integer)
    recvtime=db.Column(db.Integer)
    recvflag=db.Column(db.Integer)
    deviceid=db.Column(db.String(16))
    extinfo=db.Column(db.String(200))
    ext1=db.Column(db.Integer)
    ext2=db.Column(db.Integer)
    memo=db.Column(db.String(200))
    readflag=db.Column(db.Integer)

def class_to_dict(obj):
    
    is_list = obj.__class__ == [].__class__
    is_set = obj.__class__ == set().__class__
    if is_list or is_set:
        obj_arr = []
        for o in obj:
            dict = {}
            a = o.__dict__
            if "_sa_instance_state" in a:
                del a['_sa_instance_state']
            dict.update(a)
            obj_arr.append(dict)
        return obj_arr
    else:
        dict = {}
        a = obj.__dict__
        if "_sa_instance_state" in a:
            del a['_sa_instance_state']
        dict.update(a)
        return dict
